home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Warrior’s Progress / source code / Source / Libraries / Menus / Low Level / MenuObject.cp < prev    next >
Encoding:
Text File  |  1997-06-28  |  2.8 KB  |  142 lines  |  [TEXT/CWIE]

  1. // MenuObject.cp
  2.  
  3. #ifndef MenuObject_h
  4. #include "MenuObject.h"
  5. #endif
  6.  
  7. MenuObject::MenuObject( MenuID theID, ConstPString title )
  8.   : menu( NewMenu( theID, title ) ),
  9.      length( CountMItems( menu ) ),
  10.      id( theID )
  11.   {
  12.     Assert( menu != 0 );
  13.     Assert( *menu != 0 );
  14.     Assert( id != 0 );
  15.     Assert( id == (*menu)->menuID );
  16.     Assert( title.Length() > 0 );
  17.   }
  18.  
  19. MenuObject::MenuObject( MenuHandle theMenu )
  20.   : menu( theMenu ),
  21.      length( CountMItems( menu ) ),
  22.      id( (*theMenu)->menuID )
  23.   {
  24.     Assert( menu != 0 );
  25.     Assert( *menu != 0 );
  26.     Assert( id != 0 );
  27.   }
  28.  
  29. MenuObject::MenuObject( ResourceID resource )
  30.   : menu( GetMenu( resource ) ),
  31.      length( CountMItems( menu ) ),
  32.      id( (*menu)->menuID )
  33.   {
  34.     Assert( menu != 0 );
  35.     Assert( *menu != 0 );
  36.     Assert( id != 0 );
  37.     Assert( id == resource );    // Keeping these equal avoids bugs
  38.                                         // in some versions of system software
  39.   }
  40.  
  41. void MenuObject::InsertItem( uint16 index, ConstPString text )
  42.   {
  43.     Assert( length < maxint16 );
  44.     Assert( index <= length );
  45.     length++;
  46.     InsertMenuItem( menu, "\p-", index );
  47.     (*this)[index].SetText( text );
  48.         // We set the text separately to avoid the meta-character mess
  49.   }
  50.  
  51. void MenuObject::AppendItem( ConstPString text )
  52.   {
  53.     Assert( length < maxint16 );
  54.     length++;
  55.     AppendMenu( menu, "\p-" );
  56.     (*this)[ length-1 ].SetText( text );
  57.         // We set the text separately to avoid the meta-character mess
  58.   }
  59.  
  60. void MenuObject::InsertDivider( uint16 index )
  61.   {
  62.     Assert( length < maxint16 );
  63.     Assert( index <= length );
  64.     length++;
  65.     InsertMenuItem( menu, "\p-", index );
  66.   }
  67.  
  68. void MenuObject::AppendDivider()
  69.   {
  70.     Assert( length < maxint16 );
  71.     length++;
  72.     AppendMenu( menu, "\p-" );
  73.   }
  74.  
  75. void MenuObject::InsertResources( uint16 index, ResType type )
  76.   {
  77.     Assert( index <= length );
  78.     InsertResMenu( menu, index, type );
  79.     length = CountMItems( menu );
  80.   }
  81.  
  82. void MenuObject::AppendResources( ResType type )
  83.   {
  84.     AppendResMenu( menu, type );
  85.     length = CountMItems( menu );
  86.   }
  87.  
  88. void MenuObject::DeleteItem( uint16 index )
  89.   {
  90.     Assert( index < length );
  91.     DeleteMenuItem( menu, index );
  92.     length--;
  93.   }
  94.  
  95. void MenuObject::DeleteItems( URange16 range )
  96.   {
  97.     Assert( range.End() <= length );
  98.     
  99.     for ( uint16 end = range.End(); end > range.Start(); end-- )
  100.         DeleteMenuItem( menu, end - 1 );
  101.     
  102.     length -= range.Length();
  103.   }
  104.  
  105. void MenuObject::Enable()
  106.   {
  107.     if ( !Enabled() )
  108.         EnableItem( menu, 0 );
  109.   }
  110.  
  111. void MenuObject::Disable()
  112.   {
  113.     if ( Enabled() )
  114.         DisableItem( menu, 0 );
  115.   }
  116.  
  117. void MenuObject::EnableIfItemsEnabled()
  118.   {
  119.     uint32 enableFlags = (*menu)->enableFlags;
  120.     
  121.     if ( length < 31 )
  122.         enableFlags &= (1L << (length+1))-1;
  123.     
  124.     if ( enableFlags == 1 )
  125.         DisableItem( menu, 0 );
  126.      else
  127.         if ( enableFlags > 0 && (enableFlags & 1) == 0 )
  128.             EnableItem( menu, 0 );
  129.   }
  130.  
  131. void MenuObject::EnableTail()
  132.   {
  133.     if ( !TailEnabled() )
  134.         EnableItem( menu, 31 );
  135.   }
  136.  
  137. void MenuObject::DisableTail()
  138.   {
  139.     if ( TailEnabled() )
  140.         DisableItem( menu, 31 );
  141.   }
  142.